package demo1;

//写一个泛型类，其中有一个方法，然后求数组中的最大值

class Alg<T extends Comparable<T>> {
    //<T extends Comparable<T>> 表示T必须是实现了这个Comparable这个接口的
    public T findMax(T[] array) {
        T max = array[0];//假设0下标为最大值
        for(int i = 0; i < array.length; i++) {
            //爆红原因，引用类型不能通过大小比较，所以我们需要使用Comoarable这个接口的
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}

//泛型的一个静态方法，静态方法不属于对象的，所以我们就不用创建对象了，也就不用声明为泛型类了
class Alg2 {
    public static<T extends Comparable<T>> T findMax(T[] array) {
    T max = array[0];//假设0下标为最大值
    for(int i = 0; i < array.length; i++) {
        //爆红原因，引用类型不能通过大小比较，所以我们需要使用Comoarable这个接口的
        if(max.compareTo(array[i]) < 0) {
            max = array[i];
        }
    }
    return max;
}

}
public class Test2 {
    public static void main(String[] args) {
        //此时我们就不需要创建对象传递参数
        Integer[] array = {1,5,6,8,7,20};
        Integer Max = Alg2.<Integer>findMax(array);
        //这里的<Integer>指定了传递的参数类型，也可以省略掉
        System.out.println(Max);

    }
    public static void main1(String[] args) {
        //创建对象才能调用alg方法
        Alg<Integer> alg = new Alg<>();
        Integer[] array = {1,5,6,8,7,20};
        Integer Max = alg.<Integer>findMax(array);
        //这里的<Integer>指定了传递的参数类型，也可以省略掉
        System.out.println(Max);

    }

}
